#include <bits/stdc++.h>
using namespace std;
vector<int> a;
int n, k;

// 检查所有草莓的和s , 草莓分x个礼盒是否可行
bool check(long long s, long long x) {
  // 所有草莓的和
  for (int i = 0; i < k - 1; i++) { // 分前k-1种
    if (a[i] > x) {                 // 如果当前种类数量超过目标值
      s -= a[i];                    // 这种草莓以后不用
    } else {                        // 如果不够
      s -= x;                       // 凑齐x个
    }
    // 还要凑k-i-1种草莓，每种需要x个，如果剩下的草莓数量不够，返回false
    if (s / (k - i - 1) < x) {
      return false;
    }
  }
  return s >= x; // 剩下的大于等于x，可以，小于x，不可以
}
int main() {
  int t;
  cin >> t;
  while (t--) { // t组数据
    cin >> n >> k;
    a.clear(); // 清空数组
    long long sum = 0;

    for (int i = 0; i < n; i++) { // 读入数据
      int x;
      cin >> x;
      sum += x; // 求和
      a.push_back(x);
    }
    // 从大到小排序
    sort(a.begin(), a.end(), greater<int>());
    long long l = 0;           // l为一定可以做到的
    long long r = sum / k + 1; // r为一定不可以做到的

    long long ans = 0;
    while (l <= r) { // 二分
      long long mid = (r + l) / 2;
      if (check(sum, mid)) { // 如果可以
        ans = mid;
        l = mid + 1;
      } else { // 不可以
        r = mid - 1;
      }
    }
    cout << ans << endl;
  }
  return 0;
}